Fix release version replacement appending old suffixes#193
Conversation
- Fix sed patterns in publish-maven.yml to use general qualifier regex `\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*` that matches any version qualifier format (-java.N, -java-preview.N, -beta-java.N) and also handles previously-chained invalid versions - Fix awk regex patterns in update-changelog.sh to recognize -beta-java.N in [Unreleased] and version link patterns (-(beta-)?java(-preview)?.N) - Fix duplicate [Unreleased] link bug: track unreleased_link_handled flag so the first-version-link insertion block only fires when there is no existing [Unreleased] link to update - Move [Unreleased] handler before first-version-link handler in awk so the flag is set before the later block evaluates it - Update version validation regex to accept -beta-java.N format - Fix CHANGELOG.md: remove duplicate [Unreleased] links and fix incorrect predecessor version references for 1.0.0-beta-java.2 and .3 - Fix README.md, jbang-example.java, and cookbook markdown files: replace chained invalid versions with correct 1.0.0-beta-java.3 - Fix test-update-changelog.sh: replace ((passed++)) with passed=$((passed+1)) to avoid set -e triggering on arithmetic result 0; add two new tests for beta-java format and no-duplicate-links guarantee Co-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>
|
@brunoborges thanks. Please mark this Ready for review as the signal for me to take a look at it. |
There was a problem hiding this comment.
Pull request overview
Fixes release automation and changelog update tooling so version replacement correctly handles -beta-java.N qualifiers (and previously chained suffixes), preventing invalid artifact coordinates in docs/examples and duplicate [Unreleased] link definitions in CHANGELOG.md.
Changes:
- Update
publish-maven.ymlversion validation and sed replacement patterns to fully replace qualified versions (including-beta-java.N) rather than appending new qualifiers onto old ones. - Fix
update-changelog.shawk parsing so it correctly identifies qualified predecessor versions and avoids inserting duplicate[Unreleased]link definitions. - Clean up existing documentation/examples and
CHANGELOG.md, and extend the changelog script’s test suite (including fixing the test runner’sset -eincrement bug).
Show a summary per file
| File | Description |
|---|---|
| src/site/markdown/cookbook/pr-visualization.md | Fix JBang //DEPS example to use the correct non-chained beta version. |
| src/site/markdown/cookbook/persisting-sessions.md | Fix multiple //DEPS snippets to remove chained beta suffixes. |
| src/site/markdown/cookbook/multiple-sessions.md | Fix //DEPS snippets to reference the correct beta version. |
| src/site/markdown/cookbook/managing-local-files.md | Fix //DEPS snippets to reference the correct beta version. |
| src/site/markdown/cookbook/error-handling.md | Fix multiple //DEPS snippets to reference the correct beta version. |
| README.md | Update dependency snippets to the corrected beta version (and remove chained versions). |
| jbang-example.java | Fix //DEPS to the corrected beta version. |
| CHANGELOG.md | Remove duplicate [Unreleased] link definitions and correct beta predecessor compare links. |
| .github/workflows/publish-maven.yml | Fix version format validation and sed replacement patterns to correctly replace qualified versions. |
| .github/scripts/release/update-changelog.sh | Fix awk regexes/flow to correctly parse qualified versions and prevent duplicate [Unreleased] insertion. |
| .github/scripts/release/test-update-changelog.sh | Fix test runner increment logic under set -e; add tests for -beta-java.N and duplicate-link prevention. |
Copilot's findings
- Files reviewed: 11/11 changed files
- Comments generated: 1
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
@edburns ready for review |
…ersion-replacement Co-authored-by: edburns <75821+edburns@users.noreply.github.com>
Merged |
…lease-version-replacement Co-authored-by: edburns <75821+edburns@users.noreply.github.com>
Merged
Merged |
12:19 PromptLook at the changes in https://github.com/github/copilot-sdk-java/pull/193/changes and explain them to me. Why is this PR necessary? What issue does it fix? 13:32 ResponseOptimized tool selectionI’m going to inspect the local diff and the touched code paths so I can explain the PR in terms of behavior, not just file churn. Read changed files in Searched for files matching Searched for text I’ve got the local changes, but that diff doesn’t match the PR number you linked, so I’m going to fetch the actual PR patch and then line it up with the relevant classes here. Searched for regex Fetched https://patch-diff.githubusercontent.com/raw/github/copilot-sdk-java/pull/193.patch Fetched https://github.com/github/copilot-sdk-java/pull/193/files Now I have the actual PR. I’m going to read the core release script and the affected docs locally so I can explain the bug precisely and not rely on GitHub’s truncated diff. Read Read , lines 70 to 155 Read , lines 25 to 70 Read PR #193 is a release-automation fix, not an SDK runtime change. The short version: the repo’s release workflow was mangling version strings when the version used the newer beta qualifier format, and it was also generating bad changelog links. That left the published docs/examples pointing at nonsense artifact versions like The core bug is in the release workflow’s regexes. In publish-maven.yml, the old It also fixes the changelog updater in update-changelog.sh. That script had two related problems:
The PR fixes both by expanding the version regexes and by changing the AWK control flow so the existing So, why is this PR necessary? Because without it, a release using beta-qualified Java versions can corrupt:
What issue does it fix? The issue is exactly what the PR title says: release version replacement was appending old suffixes instead of replacing the whole version, and the changelog logic was producing incorrect and duplicated links for beta Java releases. In practical terms, it fixes broken release metadata and broken copy-paste installation examples for users consuming beta builds. 13:33 PromptWhat about the damage done by releases before this fix? Does this PR fix that? 13:34 PromptYes. Did I release mangled artifacts? 13:38 ResponseI’m going to use Ran terminal command: gh release list --repo github/copilot-sdk-java Ran terminal command: gh release view v1.0.0-beta-java.3 --repo github/copilot-sdk-java --json tagName,targetCommitish,publishedAt,name Ran terminal command: gh release view v1.0.0-beta-java.2 --repo github/copilot-sdk-java --json tagName,targetCommitish,publishedAt,name Ran terminal command: gh release view v1.0.0-beta-java.1 --repo github/copilot-sdk-java --json tagName,targetCommitish,publishedAt,name I’ve got the release set; next I’m checking the tagged contents themselves, because that’s the cleanest way to tell whether those releases captured the mangled docs or just produced bad state later on Ran terminal command: gh api repos/github/copilot-sdk-java/git/ref/tags/v1.0.0-beta-java.3 Ran terminal command: gh api repos/github/copilot-sdk-java/git/ref/tags/v1.0.0-beta-java.2 Ran terminal command: gh api repos/github/copilot-sdk-java/git/ref/tags/v1.0.0-beta-java.1 Ran terminal command: git show --stat --name-only v1.0.0-beta-java.3 -- README.md jbang-example.java CHANGELOG.md src/site/markdown/cookbook I’ve resolved the tags; one more pass and I can answer cleanly whether the broken strings were part of the tagged release contents or only later fallout. Ran terminal command: gh api repos/github/copilot-sdk-java/git/tags/324cb473f6a28a9c106c48a5e3182a364de14351 Ran terminal command: gh api repos/github/copilot-sdk-java/git/tags/1105df7b9ce9a2674d8717e6f6f844604efc41e1 Ran terminal command: gh api repos/github/copilot-sdk-java/git/tags/78702bf6c45ba2ae0662de5b252654135e36076c Ran terminal command: git grep -n "beta-java.3-beta-java|beta-java.2-beta-java|beta-java.1-beta-java" v1.0.0-beta-java.3 -- README.md jbang-example.java CHANGELOG.md src/site/markdown/cookbook That’s the key finding: the Ran terminal command: git show v1.0.0-beta-java.3:pom.xml | Select-String -Pattern '|copilot-sdk-java' -Context 0,0 Ran terminal command: git show v1.0.0-beta-java.2:pom.xml | Select-String -Pattern '|copilot-sdk-java' -Context 0,0 Ran terminal command: git show v1.0.0-beta-java.1:pom.xml | Select-String -Pattern '|copilot-sdk-java' -Context 0,0 Ran terminal command: git grep -n "beta-java.2-beta-java|beta-java.1-beta-java" v1.0.0-beta-java.2 -- README.md jbang-example.java CHANGELOG.md src/site/markdown/cookbook ; git grep -n "beta-java.1-beta-java" v1.0.0-beta-java.1 -- README.md jbang-example.java CHANGELOG.md src/site/markdown/cookbook I’ve confirmed the bad strings were present in the Ran terminal command: git show v1.0.0-beta-java.3:pom.xml | Select-String -Pattern '^\s*.*$' Ran terminal command: git show v1.0.0-beta-java.2:pom.xml | Select-String -Pattern '^\s*.*$' Ran terminal command: git show v1.0.0-beta-java.1:pom.xml | Select-String -Pattern '^\s*.*$' Yes, you did release tags that contain mangled version references, but the evidence says the published artifact coordinates themselves were not mangled. What I verified with
That strongly indicates the Maven artifacts published under those releases were the proper coordinates, not nonsense names. But the bad news is real too: the release tags for For
For
So the precise answer is:
So the blast radius looks like: broken documentation/examples in the |
The release automation was generating chained artifact versions like
1.0.0-beta-java.3-beta-java.2-beta-java.1and duplicate[Unreleased]link definitions inCHANGELOG.mdbecause the version qualifier regex didn't recognize the-beta-java.Nformat.Root causes
sed patterns (
publish-maven.yml) — BRE group syntax bug:(beta-)was treated as a literal string(beta-)rather than an optional group. Pattern only matched the baseM.M.P, then the new qualifier was appended, leaving the old suffix intact:awk script (
update-changelog.sh) — Two bugs:[Unreleased]:URL regex extracted only the base version, so the new version link pointed to the wrong predecessor (e.g.,v0.3.0-java.2instead ofv1.0.0-beta-java.2).[Unreleased]:handler and the first-version-link handler could fire in the same run, each inserting a new[Unreleased]:definition.Fixes
publish-maven.yml: Replaced all sed version patterns with\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*— matches-java.N,-java-preview.N,-beta-java.N, and also cleans up pre-existing chained versions. Updated version validation regex to accept-beta-java.N.update-changelog.sh: Extended awk version regex to(-(beta-)?java(-preview)?.[0-9]+)?; addedunreleased_link_handledflag to prevent double-insertion of[Unreleased]links; reordered the two awk blocks so the flag is set before the first-version-link block evaluates it.CHANGELOG.md: Removed 18 duplicate[Unreleased]entries; corrected predecessor links for1.0.0-beta-java.2and1.0.0-beta-java.3.README.md,jbang-example.java, cookbook*.md: Replaced chained invalid versions with correct1.0.0-beta-java.3.test-update-changelog.sh: Fixed pre-existingset -e+((passed++))bug that caused only one test to run; added tests for-beta-java.Nformat and duplicate-link prevention.Pull request checklist
mvn spotless:applyhas been run to format the codemvn clean verifypasses locallyDoes this introduce a breaking change?